package com.gjintel.framework.common.service;

import java.io.IOException;
import java.net.SocketException;
import java.util.List;

import com.gjintel.business.proj.model.ComposeIdPK;
import com.gjintel.business.proj.model.ComposeIdPK2;
import com.gjintel.framework.util.dto.Bank;


/**
 * 保证金服务 接口：包括注册 ，退还和查询
 * @author ruixman@qq.com
 *
 */
public interface IDepositService {
	
	final static String DEPOSITIN_REG_MODEL_XML="3001.xml";      //注册银行虚拟用户
	final static String DEPOSITIN_LIST_MODEL_XML="4011.xml";     //查询 项目投标人列表
	final static String DEPOSITIN_SINGLE_MODEL_XML="3021.xml";   //查询单个人列表
	final static String DEPOSIT_BACK_MODEL_XML="3031.xml";       //查询单笔投标人银行退回保证表
	final static String PROJECT_OPEN_MODEL_XML="3041.xml";       //项目开标时间维护
	final static String DEPOSIT_BACK_LIST_MODEL_XML="3051.xml";  //查询银行退回保证表列表
	/**推送到银行
	 * 
	 * @param projId
	 * @return 成功为1，不成功为0,错误为 -1
	 */
	public int regToBank(String projId) throws IOException,SocketException;
	
	/**根据项目id,得到交纳保证金的用户
	 * @param projId
	 * @return list
	 */
	public List<Bank> getDepositList(String projId);
	
	/**
	 * 是否付过保证 金
	 * @param bidderId： 投标人id
	 * @param projId:项目id
	 * @param bidderName：投标人名称
	 * @param projName：项目名称
	 * @return：已交为1,未交为0,错误 为 -1，系统用户账户名与银行账户名不一至：5
	 */
	public int ifPaySingleDeposit(String bidderId,String projId,String bidderName,String projName);

	/**
	 * 退还保证金
	 * @param bidderId： 投标人id
	 * @param projId:项目id
	 * @param bidderName：投标人名称
	 * @param projName：项目名称
	 * @return：已退还为1,未退还0,错误 为 -1
	 */
	public int returnDepositByProj(String bidderId,String projId,String bidderName,String projName,ComposeIdPK pk);
	
	/**退还系统外保证金
	 * @param bank 银行的信息
	 * @return：已退还为1,未退还0,错误 为 -1
	 */
	public int returnDepositOutSysByProj(Bank bank,String ProjId,ComposeIdPK2 pk);
	
	/**
	 * 根据项目id,查询中心向该投标人退还保证金的列表
	 * @param projId:项目id
	 * @param projName：项目名称
	 * @return：返回银行List
	 */
	public List<Bank> searchReturnDepositByProj(String projId,String projName);
	
	/**
	 * 扣除保证金
	 * @param bidderId： 投标人id
	 * @param projId:项目id
	 * @param bidderName：投标人名称
	 * @param projName：项目名称
	 * @return：已成功为1,不成功：0,错误 为 -1
	 */
	public int cutDepositeBy(String bidderId,String projId,String bidderName,String projName);
	
	/**
	 * 开标时间维护
	 * @param projId
	 * @return 已成功为1,不成功：0,错误 为 -1
	 */
	public int editOpenTime(String projId);
	

}
